From 407ab93b590c7192227e83fe03edfa4d744b84d0 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 8 Jun 2019 13:39:53 +0000 Subject: [PATCH] gdk: Always deliver key events to toplevels This is just a hack to see that this works. Eventually, the backends should do the right thing. --- gdk/gdksurface.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c index 3beff1e9cf..333c5d39a6 100644 --- a/gdk/gdksurface.c +++ b/gdk/gdksurface.c @@ -4030,6 +4030,32 @@ check_autohide (GdkEvent *event) return FALSE; } +static gboolean +is_key_event (GdkEvent *event) +{ + switch ((guint) gdk_event_get_event_type (event)) + { + case GDK_KEY_PRESS: + case GDK_KEY_RELEASE: + return TRUE; + default:; + } + + return FALSE; +} + +static void +rewrite_event_for_toplevel (GdkEvent *event) +{ + GdkSurface *surface; + + surface = gdk_event_get_surface (event); + while (surface->parent) + surface = surface->parent; + + g_set_object (&event->any.surface, surface); +} + gboolean gdk_surface_handle_event (GdkEvent *event) { @@ -4046,6 +4072,8 @@ gdk_surface_handle_event (GdkEvent *event) } else { + if (is_key_event (event)) + rewrite_event_for_toplevel (event); g_signal_emit (gdk_event_get_surface (event), signals[EVENT], 0, event, &handled); } -- 2.30.2